//
// Created by Thinkpad on 2025/11/9.
//

#include <iostream>
using namespace std;

template <typename ReturnType = double, typename T,typename P>
ReturnType maximum(T a,P b);

template <typename T,typename P,typename ReturnType = double>
ReturnType minimum(T a,P b) {
    return (a < b) ? a : b;
}

int main() {
    auto max1 = maximum(1,2);
    cout << "max1 : " << max1 << endl;
    cout <<" size of max1:" << sizeof(max1) << endl;

    auto max2 = maximum<int>(1,2);
    cout << "max2 : " << max2 << endl;
    cout <<" size of max2:" << sizeof(max2) << endl;

    auto min3 = minimum<int,int,int>(10,20);
    cout << "min3 : " << min3 << endl;
    cout <<" size of min3:" << sizeof(min3) << endl;

    return 0;
}

template <typename ReturnType, typename T, typename P>
ReturnType maximum(T a,P b) {
    return (a > b) ? a : b;
}